package cn.tedu.straw.api.question.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class TimerAspect {
    // @Around注解：包裹，即在某个指定的连接点的前、后均存在切面，需要执行某些代码
    // @Around注解中的参数：配置切面在哪里
    @Around("execution(* cn.tedu.straw.api.question.service.impl.*.* (..))")
    // 方法名称：自定义
    // 参数列表：ProceedingJoinPoint表示“连接点”，也就是以上注解配置的业务方法
    // 返回值：业务方法的返回值
    // 异常：业务方法抛出的异常
    public Object aaaaa(ProceedingJoinPoint pjp) throws Throwable {
    // 获取起始时间
        long start = System.currentTimeMillis();
    // 调用业务方法
        Object object = pjp.proceed();
    // 获取结束时间
        long end = System.currentTimeMillis();
    // 计算时间差
        System.out.println("执行耗时：" + (end - start) + "ms。");
    // 返回调用业务方法后得到的结果
        return object;
    }
}
